﻿using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ADV_Evaluator;
using ADV_Evaluator.Data;
using ADV_Evaluator.Command;


namespace ADV_Editor.CommandDialog {

    /// <summary>
    /// 「文章の表示」コマンドのダイアログ
    /// </summary>
    partial class ChoiceDialog : CommandDialogBase {

        /// <summary>
        /// 新規挿入するときのコンストラクタ
        /// </summary>
        public ChoiceDialog() {
            InitializeComponent();
        }

        /// <summary>
        /// 編集するときのコンストラクタ
        /// </summary>
        /// <param name="param">属性</param>
        public ChoiceDialog(ChoiceParams param) : this() {
            // 初期値の "はい", "いいえ" をクリア
            textBox_option1.Text = string.Empty;
            textBox_option2.Text = string.Empty;
            // 属性の値をセット
            try {
                textBox_option1.Text = param.Options[0];
                textBox_option2.Text = param.Options[1];
                textBox_option3.Text = param.Options[2];
                textBox_option4.Text = param.Options[3];
            } catch { }
        }

        /// <summary>
        /// 選択肢のテキストが書き換わったとき
        /// </summary>
        private void textBox_option_TextChanged(object sender, EventArgs e) {
            // 選択肢は最低２つ必須。未入力ならOKボタンは押せない
            int count = 0;
            if (textBox_option1.Text.Length != 0) count++;
            if (textBox_option2.Text.Length != 0) count++;
            if (textBox_option3.Text.Length != 0) count++;
            if (textBox_option4.Text.Length != 0) count++;
            button_OK.Enabled = (count >= 2);
        }

        /// <summary>
        /// 入力された各項目をコマンド化したもの
        /// </summary>
        public override CommandListData Command {
            get {
                ChoiceParams param = new ChoiceParams();
                // 全選択肢をあつめたリスト
                List<string> options = new List<string>(new string[] { textBox_option1.Text, textBox_option2.Text, textBox_option3.Text, textBox_option4.Text });
                // 末尾側の入力されていない選択肢を除去
                // 間は別に抜けていてもOK
                for (int i = options.Count - 1; i >= 1; i--) {
                    if (options[i].Length == 0) {
                        options.RemoveAt(i);
                    } else {
                        break;
                    }
                }
                param.Options = options.ToArray();
                return new CommandListData(CommandName.選択肢の表示, param); 
            }
        }

        #region ヘルプ
        /// <summary>
        /// OKボタンのヘルプ
        /// </summary>
        protected void button_OK_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "このダイアログを閉じて、コマンドを追加します。");
        }
        /// <summary>
        /// キャンセルボタンのヘルプ
        /// </summary>
        protected void button_Cancel_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "変更内容を保存せずにこのダイアログを閉じます。");
        }
        /// <summary>
        /// 選択肢のヘルプ
        /// </summary>
        private void options_HelpRequested(object sender, HelpEventArgs hlpevent) {
            ShowPopupHelp(sender, "選択肢の文章を入力します。");
        }
        #endregion

    }
}